package com.telehot.location.util;

import android.content.Context;
import android.os.Environment;

import com.ytlibrary.BaseFunction;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import static com.ytlibrary.BaseFunction.showToast;

/**
 * Author 余涛
 * Description 功能说明
 * Time 2019/6/18 16:11
 */
public class OperateFile {
    private Context mContext;
    private String fileName = "location_data.json";   //文件名
    private String saveFolder = Environment.getExternalStorageDirectory() + "/1天好文件";  //文件目录

    public OperateFile(Context context) {
        this.mContext = context;

        new BaseFunction(context);
    }


    public void saveFileContent(String jsonData) {
        File dir = new File(saveFolder); // 本地保存数据，看看文件夹是否存在
        if (!dir.exists()) dir.mkdirs();
        File file = new File(dir, fileName);

        if ("[]".equals(jsonData) || "".equals(jsonData) || jsonData == null){
            showToast("定位数据为空");
            return;
        }
        jsonData = spliceFileContent(jsonData);  //将文件里面的内容拼接到一起
        try {
            //这里就不要用openFileOutput了,那个是往手机内存中写数据的
            FileOutputStream output = new FileOutputStream(file);
            output.write(jsonData.getBytes());
            output.close();
            showToast("存储成功");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            showToast("存储失败" + e.toString());
        } catch (IOException e) {
            e.printStackTrace();
            showToast("存储失败" + e.toString());
        }
    }

    /**
     * 拼接json数据
     */
    private String spliceFileContent(String fileContent) {

        StringBuffer buffer = new StringBuffer();  //获取全部文本
        String line; // 用来保存每行读取的内容
        try {
            File filePath = new File(saveFolder, fileName); // 要读取以上路径的文件
            InputStream is = new FileInputStream(filePath);
            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
            line = reader.readLine(); // 读取第一行
            while (line != null) { // 如果 line 为空说明读完了
                buffer.append(line); // 将读到的内容添加到 buffer 中
                line = reader.readLine(); // 读取下一行
            }
            reader.close();
            is.close();

            //如果读取文件内容为空,则直接返回
            if ("".equals(buffer.toString()) || "[]".equals(buffer.toString())) return fileContent;

            //拼接字符串, 文件中内容
            StringBuffer content = new StringBuffer(fileContent);
            buffer = buffer.replace(buffer.length()-1, buffer.length(),",");
            content = content.replace(0, 1, "");
            return buffer.toString() + content;
        } catch (IOException e) {
            e.printStackTrace();
            return "";
        }
    }

    /**
     * 读取文本内容
     */
    public String readFileContent() {

        StringBuffer buffer = new StringBuffer();  //获取全部文本
        String line; // 用来保存每行读取的内容
        try {
            File filePath = new File(saveFolder, fileName); // 要读取以上路径的文件
            InputStream is = new FileInputStream(filePath);
            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
            line = reader.readLine(); // 读取第一行
            while (line != null) { // 如果 line 为空说明读完了
                buffer.append(line); // 将读到的内容添加到 buffer 中
                buffer.append("\n"); // 添加换行符
                line = reader.readLine(); // 读取下一行
            }
            reader.close();
            is.close();

            //如果读取文件内容为空,则直接返回
            if ("".equals(buffer.toString())) return "";

            return buffer.toString();
        } catch (IOException e) {
            e.printStackTrace();
            return "";
        }
    }


    /**
     * 覆盖掉文件中的内容
     * 执行删除操作，可以使用该方法
     */
    public void coverFileContent(String jsonData) {
        File dir = new File(saveFolder); // 本地保存数据，看看文件夹是否存在
        if (!dir.exists()) dir.mkdirs();
        File file = new File(dir, fileName);

        try {
            //这里就不要用openFileOutput了,那个是往手机内存中写数据的
            FileOutputStream output = new FileOutputStream(file);
            output.write(jsonData.getBytes());
            output.close();
            showToast("删除成功");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            showToast("删除失败" + e.toString());
        } catch (IOException e) {
            e.printStackTrace();
            showToast("删除失败" + e.toString());
        }
    }

}
